home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-12-04 | 26.1 KB | 1,156 lines | [TEXT/MPS ] |
-
- CASE OBJ
- Case On
-
- INCLUDE 'M16.UTIL'
-
- _useToolset equ 0 ; define as 1 to use Tool039
-
- open_call equ $2010
- read_call equ $2012
- close_call equ $2014
- dinfo_call equ $202c
- dstatus_call equ $202d
- dcontrol_call equ $202e
-
- Import scanDevnum
- Import _toolErr
-
- ;***********************************
- ; Scanner_SetMode()
- ; description: This call sets the mode for scanning
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- Scanner_SetMode PROC EXPORT
- if _useToolset then
- lda >scanDevnum
- sta >ms_did
- else
- ENTRY ms_did
- endif
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dcontrol_call
- dc.l mode_select ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
-
- mode_select
- dc.w $0005
- ms_did dc.w $0000
- dc.w $8015
- dc.l @cdb
- dc.l $0000000C
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $15
- dc.b $10
- dcb.b 2,$00
- dc.b $0C
- dcb.b 7,$00
- dc.l @data
-
- @data dcb.b 4,$00 ;reserved - 4 bytes
- dc.b $01 ;page code - Apple-specific parameter page
- dc.b $08 ;page length - Apple-specific page
- dc.b $01 ;graymap - 1 = no alteration to data
- dc.b $40 ;auto background adjustment threshold
- dc.b $00 ;lamp - 0 = turn off
- dcb.b 3,$00 ;reserved - 3 bytes
-
- ENDP
-
- ;***********************************
- ; Scanner_SetHalfTones()
- ; description: This call sets the mode for scanning
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- Scanner_SetHalfTones PROC EXPORT
- if _useToolset then
- lda >scanDevnum
- sta >send_did
- else
- ENTRY send_did
- endif
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dcontrol_call
- dc.l send ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
- send
- dc.w $0005
- send_did dc.w $0000
- dc.w $802A
- dc.l @cdb
- dc.l $00000011
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $2A
- dc.b $00
- dc.b $02
- dcb.b 2,$00
- dc.b $02
- dcb.b 2,$00
- dc.b $11
- dcb.b 3,$00
- dc.l @data
-
- @data dc.b $44,$f0,$40,$80,$c0,$b0,$00,$10,$50
- dc.b $70,$30,$20,$90,$e0,$a0,$60,$d0
-
- ENDP
-
- ;***********************************
- ; Scanner_DefWindow(scanner_window_definition)
- ; description: This call defines the scanner window
- ; entry: Long pointer to the scanner definition proc.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- Scanner_DefWindow PROC EXPORT
- ENTRY dfw_did
- lda 6,S ;get the pointer to the window definition
- sta >def_data+2
- lda 4,S ;get the rest of the pointer
- sta >def_data
- if _useToolset then
- lda >scanDevnum
- sta >dfw_did
- jsl $e100a8 ;normal GS/OS entry point
- else
- @over_2 jsl $e100a8 ;normal GS/OS entry point
- endif
- dc.w dcontrol_call
- dc.l def_wndw ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
-
- def_wndw
- dc.w $0005
- dfw_did dc.w $0000
- dc.w $8024
- dc.l @cdb
- dc.l $00000030
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $24
- dcb.b 7,$00
- dc.b $30
- dc.b $80
- dcb.b 2,$00
- def_data dc.l $00000000
-
- ENDP
-
- ;***********************************
- ; Scanner_Scan()
- ; description: This call starts the scanner scanning
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- Scanner_Scan PROC EXPORT
- if _useToolset then
- lda >scanDevnum
- sta >scan_did
- else
- ENTRY scan_did
- endif
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dcontrol_call
- dc.l scan ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
- scan
- dc.w $0005
- scan_did dc.w $0000
- dc.w $801B
- dc.l @cdb
- dc.l $00000001
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $1b
- dcb.b 3,$00
- dc.b $01
- dc.b $00
- dcb.b 6,$00
- dc.l @data
-
- @data dc.b $00
-
- ENDP
-
- ;***********************************
- ; Scanner_Read(data_pointer, requestCount)
- ; description: This call starts the scanner scanning
- ; entry: A pointer to the data destination, and a long count.
- ; exit: Carry set, and error code in Acc.
- ;NOTE: here we must utilize the pointer we are handed...., and it must reflect the real data size
- ;***********************************
- Scanner_Read PROC EXPORT
-
- lda 6,S ;get the pointer to the window definition
- sta >buffer1+2
- lda 4,S ;get the rest of the pointer
- sta >buffer1
-
- lda 10,S ;get the data length
- sta >r_trans+2
- lda 8,S ;get the rest of the data length
- sta >r_trans
-
- @save_loop jsl $e100a8 ;normal GS/OS entry point
- dc.w read_call
- dc.l read ;4 byte pointer to parameter block
- bcs @exit
-
- sta >_toolErr
- lda >t_trans+2
- tax
- lda >t_trans
-
- rtl
-
- @exit sta >_toolErr
- rtl
-
- export r_dref
- read
- dc.w $0004
- r_dref dc.w $0000
- buffer1 dc.l $00000000
- r_trans dc.l 300
- t_trans dc.l $00000000
-
- ENDP
-
- ;***********************************
- ; CPCScan_SetMode()
- ; description: This call sets the mode for scanning on the
- ; Complete PC Scanner, both Hand and Page
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- CPCScan_SetMode PROC EXPORT
-
- ENTRY CPCms_did
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dcontrol_call
- dc.l @mode_select ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
-
- @mode_select
- dc.w $0005
- CPCms_did dc.w $0000
- dc.w $8015
- dc.l @cdb
- dc.l $0000000C
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $15
- dcb.b 3,$00
- dc.b $0C
- dcb.b 7,$00
- dc.l CPC_MSdata
-
- EXPORT CPC_MSdata
- CPC_MSdata dcb.b 4,$00 ;reserved - 4 bytes
- EXPORT CPC_Type
- CPC_Type dc.b $00 ;Scanner Type <128 = Hand, ≥128 = Page
- dc.b $00 ;reserved
- EXPORT CPC_Page_Ctrl
- CPC_Page_Ctrl dc.b $00 ;Page Control 1=Go, 0 = Stop
- EXPORT CPC_Hand_Ctrl
- CPC_Hand_Ctrl dc.b $00 ;Hand Control 1=On, 0 = Off
- EXPORT CPC_Scan_Len
- CPC_Scan_Len dcb.b 2,$00 ;Bytes Per Line MSB >>> LSB
- CPC_Timer dcb.b 2,$00 ;ShutOff Timer MSB >>> LSB
-
- ENDP
-
- ;***********************************
- ; CPCScan_GetMode()
- ; description: This call gets the mode for scanning on the
- ; Complete PC Scanner, both Hand and Page
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- CPCScan_GetMode PROC EXPORT
-
- ENTRY CPCmsen_did
- IMPORT CPC_MSdata
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dstatus_call
- dc.l @mode_sense ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
-
- @mode_sense
- dc.w $0005
- CPCmsen_did dc.w $0000
- dc.w $801A
- dc.l @cdb
- dc.l $0000000C
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $1A
- dcb.b 3,$00
- dc.b $0C
- dcb.b 7,$00
- dc.l CPC_MSdata
-
- ENDP
-
- ;***********************************
- ; CPC_GDStatus()
- ; description: This call gets the data status
- ; entry: Long pointer to the scanner definition proc.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- CPC_GDStatus PROC EXPORT
-
- ENTRY CPC_GDS_did
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dstatus_call
- dc.l @gd_Status ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
-
- @gd_Status
- dc.w $0005
- CPC_GDS_did dc.w $0000
- dc.w $8007
- dc.l @cdb
- dc.l $00000004
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $07
- dcb.b 3,$00
- dc.b $04
- dcb.b 7,$00
- dc.l CPC_GDStat
-
- CPC_GDStat dc.b $00 ;Paper End Status for Page Scanner
- dc.b $00 ;Reserevd
- EXPORT CPC_Data
- CPC_Data dc.b $0000 ;Bytes Available MSB >>> LSB
- dcb.b $20,$00
-
- ENDP
-
- ;***********************************
- ; CPC_XSense()
- ; description: This call gets the Transfer Rate
- ; at the current scanner settings.
- ;
- ; For a Page Scanner:
- ; 113-137 $0071-$0089 = 300 DPI
- ; 75- 92 $004B-$005C = 200 DPI
- ;
- ; For a Hand Scanner:
- ; 85-103 $0055-$0067 = 400 DPI
- ; 63- 77 $003F-$004D = 300 DPI
- ; 42- 53 $002A-$0035 = 200 DPI
- ;
- ; entry: Long pointer to the scanner definition proc.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- CPC_XSense PROC EXPORT
-
- ENTRY CPC_XS_did
-
- ; jsl $e100a8 ;normal GS/OS entry point
- ; dc.w dstatus_call
- ; dc.l @xd_Status ;4 byte pointer to parameter block
- ; sta >_toolErr
- rtl
-
- @xd_Status
- dc.w $0005
- CPC_XS_did dc.w $0000
- dc.w $800E
- dc.l @cdb
- dc.l $00000003
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $0E
- dcb.b 3,$00
- dc.b $03
- dcb.b 7,$00
- dc.l CPC_XStatus
-
- CPC_XStatus dc.b $00 ;Will be a Two '2'
- EXPORT CPC_TRate
- CPC_TRate dc.w $0030 ;Transfer Rate MSB >>> LSB
-
- ENDP
-
- ;***********************************
- ; CPC_Read()
- ; description: This call Reads the Scaned Data
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- CPC_Read PROC EXPORT
-
- ENTRY CPCRead_did
- ENTRY CPC_ReadRqst
- ENTRY CPC_buffer1
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dstatus_call
- dc.l @read ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
- @read
- dc.w $0005
- CPCRead_did dc.w $0000
- dc.w $8008
- dc.l cdb
- CPC_ReadRqst dc.l $00000000
- dc.l $00000000
-
- cdb dc.w $0000
- dc.b $08
- dcb.b 2,$00
- dc.w $0000 ;Becomes the Request Count in the Driver
- dcb.b 7,$00
- CPC_buffer1 dc.l $00000000
-
- ENDP
-
- ;***********************************
- ; CPC_Unload()
- ; description: This call Stops the scanning Process
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- CPC_Unload PROC EXPORT
-
- ENTRY CPC_Kill_did
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dcontrol_call
- dc.l @unload ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
- @unload
- dc.w $0005
- CPC_Kill_did dc.w $0000
- dc.w $801B
- dc.l @cdb
- dc.l $00000000
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $1B
- dcb.b 11,$00
- dc.l $00000000
-
- ENDP
-
- ;***********************************
- ; CPC_Scan(data_pointer, requestCount, Width, Length)
- ;
- ; description: This call Reads the scanner Data
- ; entry: A pointer to the data destination, and a long count.
- ; exit: Carry set, and error code in Acc.
- ;
- ; NOTE: Here we must utilize the pointer we are
- ; handed...., and it must reflect the real
- ; data size
- ;
- ;***********************************
- CPC_Scan PROC EXPORT
-
- IMPORT CPC_Type
- IMPORT CPC_Page_Ctrl
- IMPORT CPC_Hand_Ctrl
- IMPORT CPC_TRate
- IMPORT CPC_Scan_Len
- IMPORT CPC_Data
- IMPORT CPC_ReadRqst
-
- lda 6,S ;get the pointer to the window definition
- sta >CPC_buffer1+2
-
- lda 4,S
- sta >CPC_buffer1
-
- lda 10,S ;get the data length
- sta >t_rqst+2
- sta >t_remain+2
-
- lda 8,S
- sta >t_rqst
- sta >t_remain
-
- lda 12,S ;get the Scan Line Width
- sta >tw_width
- clc
- adc #$0003
- lsr a
- lsr a
- sta >w_width
-
- lda 16,S ;get the data length
- sta >w_length
- ;
- ; Get the Scanner Type
- ;
- jsl CPCScan_GetMode
- bcs @exit1
- ;
- ; Get the Scanner Resolution
- ;
- jsl CPC_XSense
- ; bcs @exit1
- ;
- ; Which Scanner is it?
- ;
- lda >CPC_Type
- bmi @page
- ;
- ; It's a hand Scanner.
- ; Turn it on
- ;
- lda #$0101
- sta >CPC_Page_Ctrl
- lda #$0001
- sta >CPC_Type
-
- ;
- ; What DPI are we at?
- ;
- lda >CPC_TRate
- cmp #$0055
- bge @dpi_400
- cmp #$003F
- bge @dpi_300
- blt @dpi_200
- ;
- ; It's a Page Scanner.
- ; Turn it on
- ;
- @page lda #$0101
- sta >CPC_Page_Ctrl
- lda #$0081
- sta >CPC_Type
- ;
- ; What DPI are we at?
- ;
- lda >CPC_TRate
- cmp #$0071
- bge @dpi_300
- blt @dpi_200
- ;
- ; Set the DPI Value.
- ;
- @dpi_400 lda #400
- bra @set_dpi
-
- @dpi_300 lda #300
- bra @set_dpi
-
- @dpi_200 lda #200
-
- @set_dpi sta >CPC_Dpi
- ;
- ; Set the Scanner Type and turn the
- ; Scanner on
- ;
- lda #$0000
- sta >CPC_MSdata
-
- jsl CPCScan_SetMode
- bcs @exit1
- ;
- ; Set the Scan Line Width.
- ;
- lda >w_width
- xba
- sta >CPC_Scan_Len
- ;
- ; Set the Scanner Type and turn the
- ; Scanner on
- ;
- jsl CPCScan_SetMode
- bcc @GDS_Loop
- @exit1 brl @exit
- ;
- ; Does the Scanner have a Scan Line Yet?
- ;
- @GDS_Loop jsl CPC_GDStatus
- bcs @exit1
- lda >CPC_Data
- xba
- cmp >w_width
- blt @GDS_Loop
- ;
- ; Get the Scan Line
- ;
- lda >w_width
- sta >CPC_ReadRqst
- jsl CPC_Read
- bcs @exit1
-
- jsl covert2gray2
- bcs @skip_buff
- ;
- ; Update the Buffer Pointer
- ;
- lda >CPC_buffer1
- adc >tw_width
- sta >CPC_buffer1
- lda >CPC_buffer1+2
- adc #$0000
- sta >CPC_buffer1+2
- ;
- ; Update the Resulting Count
- ;
- @skip_buff lda >t_rslt
- adc >tw_width
- sta >t_rslt
- lda >t_rslt+2
- adc #$0000
- sta >t_rslt+2
- ;
- ; Is there any more data requested>
- ;
- sec
- lda >t_remain
- sbc >tw_width
- sta >t_remain
-
- lda >t_remain+2
- sbc #$0000
- sta >t_remain+2
-
- ora >t_remain
- beq @done ;No! Done with the Scan
-
- sec
- lda >t_remain
- sbc >tw_width ;Room for at least 1 more?
- lda >t_remain+2
- sbc #$0000
- blt @done ;No! Done with the Scan
- brl @GDS_Loop ;Yes. Go Get it
- ;
- ; No more data left. Stop the Scan
- ;
- @done jsl CPC_Unload
- bcs @exit
-
- sta >_toolErr
- lda >t_rslt+2
- tax
- lda >t_rslt
-
- rtl
-
- @exit sta >_toolErr
- rtl
-
- w_width dc.l $0000
- tw_width dc.l $0000
- w_length dc.l $0000
- CPC_Dpi dc.w $0000
-
- t_rqst dc.l $00000000
- t_remain dc.l $00000000
- t_rslt dc.l $00000000
- ;
- ; Scanned Data is 1 bit/pixel. We need to
- ; convert it to 4 bits/pixel. We will do this
- ; with a lookup table in 8 bit mode.
- ;
- covert2gray
- phb
- phk
- plb
-
- pei <$40
- pei <$42
-
- phy
-
- lda >CPC_buffer1
- sta <$40
- lda >CPC_buffer1+2
- sta <$42
-
- ldx w_width
- dex
- and #$00ff
- stx @src_ndx
- lda w_width
- asl a
- asl a
- dec a
- sta @dest_ndx
- lda #$0000
-
- SHORTM
-
- @cvrt_loop ldy @src_ndx
- lda [$40],y
- tax
- lda HTone_2Gray3,x
- pha
- lda HTone_2Gray2,x
- pha
- lda HTone_2Gray1,x
- pha
- lda HTone_2Gray0,x
-
- ldy @dest_ndx
- sta [$40],y
- pla
- dey
- sta [$40],y
- pla
- dey
- sta [$40],y
- pla
- dey
- sta [$40],y
- dey
- sty @dest_ndx
- dec @src_ndx
- bpl @cvrt_loop
-
- LONGM
-
- ply
-
- pla
- sta <$42
- pla
- sta <$40
-
- plb
- @exit clc
- rtl
-
- @src_ndx dc.w $0000
- @dest_ndx dc.w $0000
-
- HTone_2Gray0
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- dc.b $00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff,$00,$0f,$f0,$ff
- HTone_2Gray1
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff
- HTone_2Gray2
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- HTone_2Gray3
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- dc.b $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff
- ;
- ; Scanned Data is 1 bit/pixel. We need to
- ; convert it to 4 bits/pixel. We will do this
- ; with a lookup table in 8 bit mode.
- ;
- covert2gray2
- sec
- inc @pass
- beq @exit
-
- phb
- phk
- plb
-
- pei <$40
- pei <$42
-
- phy
-
- lda >CPC_buffer1
- sta <$40
- lda >CPC_buffer1+2
- sta <$42
-
- ldx w_width
- dex
- and #$00ff
- stx @src_ndx
- lda w_width
- asl a
- dec a
- sta @dest_ndx
- lda #$0000
-
- SHORTM
-
- @cvrt_loop ldy @src_ndx
- lda [$40],y
- tax
- lda HTone_2Gray5,x
- pha
- lda HTone_2Gray4,x
-
- ldy @dest_ndx
- sta [$40],y
- pla
- dey
- sta [$40],y
- dey
- sty @dest_ndx
- dec @src_ndx
- bpl @cvrt_loop
-
- LONGM
-
- ply
-
- pla
- sta <$42
- pla
- sta <$40
-
- plb
-
- lda #$ffff
- sta @pass
- clc
-
- @exit rtl
-
- @src_ndx dc.w $0000
- @dest_ndx dc.w $0000
- @pass dc.w $ffff
-
- HTone_2Gray4
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- dc.b $00,$04,$03,$0C,$30,$78,$77,$CF,$40,$88,$87,$CF,$C4,$D5,$F7,$FF
- HTone_2Gray5
- dcb.b 16,$00
- dcb.b 16,$04
- dcb.b 16,$03
- dcb.b 16,$0C
- dcb.b 16,$30
- dcb.b 16,$78
- dcb.b 16,$77
- dcb.b 16,$CF
- dcb.b 16,$40
- dcb.b 16,$88
- dcb.b 16,$87
- dcb.b 16,$CF
- dcb.b 16,$C4
- dcb.b 16,$D5
- dcb.b 16,$F7
- dcb.b 16,$FF
-
- ENDP
-
- ;***********************************
- ; Scan_Inquiry()
- ; description: This call determines the Scanner Brand
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- Scan_Inquiry PROC EXPORT
-
- ENTRY Inq_did
- ENTRY Inq_data
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dstatus_call
- dc.l @Inquiry ;4 byte pointer to parameter block
- sta >_toolErr
- rtl
- @Inquiry
- dc.w $0005
- Inq_did dc.w $0000
- dc.w $8012
- dc.l @cdb
- dc.l $00000020
- dc.l $00000000
-
- @cdb dc.w $0000
- dc.b $12
- dcb.b 3,$00
- dc.b $20
- dcb.b 7,$00
- dc.l Inq_data
-
- Inq_data dcb.b $20,$00
-
- ENDP
-
- ;***********************************
- ;
- ; Scanner_Open();
- ; description: Find and open the scanner device
- ; entry: None.
- ; exit: carry set, and error code in Acc if an error occurs.
- ;
- ;***********************************
- Scanner_Open PROC EXPORT
-
- IMPORT c_dref,Scanner_Type
-
- lda >scanDevnum ;copy scanner device ID to various parm blocks
- sta >scanner_did
- sta >ms_did
- sta >send_did
- sta >dfw_did
- sta >scan_did
- sta >wait_did
- sta >CPCms_did
- sta >CPCmsen_did
- sta >CPC_GDS_did
- sta >CPC_XS_did
- sta >CPCRead_did
- sta >CPC_Kill_did
- sta >Inq_did
- ;
- ; Do the Scanner Inquiry Call. This way we can ID the Type of Scanner that
- ; we are dealing with.
- ;
- jsl Scan_Inquiry
- bcs @exit
- ;
- ; What Scanner do We have?
- ;
- ldx #$0010
- @Apple_Loop lda >Inq_data,x
- cmp >Apple_String,x
- bne @chk_CPC
- dex
- bpl @Apple_Loop
- jmp Apple_Open
-
- @chk_CPC ldx #$0010
- @CPC_Loop lda >Inq_data,x
- cmp >CPC_String,x
- bne @chk_NuScan
- dex
- bpl @CPC_Loop
- jmp CPC_Open
-
- @chk_NuScan ldx #$0010
- @NuScan_Loop lda >Inq_data,x
- cmp >NuScan_String,x
- bne @None
- dex
- bpl @NuScan_Loop
- jmp NuScan_Open
-
- @None lda #$002f
- sec
- @exit sta >_toolErr
- rtl
-
- STRING ASIS
- Apple_String dc.b $06,$00,$02,$02,$2C,$00,$00,$00
- dc.b 'APPLE SCANNER A9M0337 '
- CPC_String dc.b $06,$00,$02,$02,$28,$00,$00,$00
- dc.b 'CPC INC Smart Scan(FW) '
- NuScan_String dc.b $06,$00,$02,$02,$28,$00,$00,$00
- dc.b 'CPC INC Smart Scan(FW) '
- ;
- ; Start point for finalizing the Apple Scanner Open Call
- ; make a DInfo call to get the device name
- ;
- Apple_Open jsl $e100a8 ;normal GS/OS entry point
- dc.w dinfo_call
- dc.l get_scan_name ;4 byte pointer to parameter block
- bcs @exit
-
- ;
- ; Now that we have the name, we can open the device (using the Character FST)
- ;
- jsl $e100a8 ;normal GS/OS entry point
- dc.w open_call
- dc.l dvc_open ;4 byte pointer to parameter block
- bcs @exit ;say goodnight if errors
-
- lda >open_dref ;copy reference number to other parm blocks
- sta >r_dref
- sta >c_dref
-
- ;
- ; Now that it's open, we can set wait mode to WAIT
- ;
- jsl $e100a8 ;normal GS/OS entry point
- dc.w dcontrol_call
- dc.l wait ;4 byte pointer to parameter block
- bcs @exit
- lda #$0000
- sta >Scanner_Type
- lda #$0000
-
- @exit sta >_toolErr
- rtl
-
- get_scan_name
- dc.w $0002 ;pCount
- scanner_did dc.w $0000
- dc.l scan_dname_buf
-
- export open_dref
- dvc_open
- dc.w $0002
- open_dref dc.w $0000
- dc.l scan_dname
-
- STRING asis
-
- scan_dname_buf dc.w 36 ;ResultBuf32 length is 36 bytes
- scan_dname ds.w 1 ;returned length word
- ds.b 32 ;space for returned device name
-
- STRING PASCAL
-
- wait
- dc.w $0005
- wait_did dc.w $0000
- dc.w $0004
- dc.l @cdb
- dc.l $00000002
- dc.l $00000000
-
- @cdb
- dc.w $0000 ;set wait mode
- ;
- ; Start point for finalizing the CPC Scanner Open Call
- ;
- CPC_Open lda #$0001
- sta >Scanner_Type
-
- lda #$0000
- clc
- sta >_toolErr
- rtl
- ;
- ; Start point for finalizing the NuScan Scanner Open Call
- ;
- NuScan_Open lda #$0002
- sta >Scanner_Type
-
- lda #$0000
- clc
- sta >_toolErr
- rtl
-
- ENDP
-
- ;***********************************
- ; Scanner_Close()
- ; description: This call closes the scanner device
- ; entry: None.
- ; exit: Carry set, and error code in Acc.
- ;***********************************
- Scanner_Close PROC EXPORT
-
- ENTRY c_dref
-
- clc
- lda >c_dref
- beq @close
-
- jsl $e100a8 ;normal GS/OS entry point
- dc.w close_call
- dc.l close ;4 byte pointer to parameter block
- @close sta >_toolErr
- rtl
- close
- dc.w $0001
- export c_dref
- c_dref dc.w $0000
-
- ENDP
-
- END
-
-
-
-
-